import axios from 'axios';
import { ElMessage } from 'element-plus';

// 创建一个专门用于音乐 API 的 axios 实例
const musicApi = axios.create({
  baseURL: 'http://localhost:3000', // 指向你本地的 NeteaseCloudMusicApi 服务
  withCredentials: true,
});

const musicService = {
  /**
   * 获取指定歌单的详情和歌曲列表
   * @param {string} id 歌单的 ID
   * @returns {Promise<object>}
   */
  async getPlaylistDetail(id) {
    try {
      const response = await musicApi.get('/playlist/detail', {
        params: { id, timestamp: Date.now() },
      });
      return response.data.playlist;
    } catch (error) {
      console.error('获取歌单详情失败:', error);
      throw new Error('无法获取歌单详情');
    }
  },

  /**
   * 获取指定歌曲的播放 URL，并附带是否为试听的信息
   * @param {string} id 歌曲的 ID
   * @returns {Promise<object|null>} 返回一个包含 url 和 isTrial 标志的对象
   */
  async getSongUrl(id) {
    try {
      const response = await musicApi.get('/song/url/v1', {
        params: { id, level: 'standard', timestamp: Date.now() },
      });

      const songData = response.data.data[0];

      if (!songData.url) {
        console.warn(`歌曲 (ID: ${id}) 无版权信息, 无法播放。`);
        return null; // 对于完全没有URL的歌曲，我们仍然返回null
      }

      return {
        url: songData.url,
        isTrial: songData.freeTrialInfo !== null || songData.fee === 1
      };

    } catch (error) {
      console.error('获取歌曲URL失败:', error);
      return null;
    }
  },

  /**
   * 根据关键词搜索歌曲
   * @param {string} keywords 搜索关键词
   * @returns {Promise<Array>} 歌曲列表数组
   */
  async searchMusic(keywords) {
    if (!keywords.trim()) {
      return [];
    }
    try {
      const response = await musicApi.get('/cloudsearch', {
        params: { keywords, timestamp: Date.now() },
      });
      if (response.data.code === 200 && response.data.result.songs) {
        return response.data.result.songs;
      }
      return [];
    } catch (error) {
      console.error('搜索音乐失败:', error);
      ElMessage.error('搜索失败，请检查API服务是否正常');
      return [];
    }
  },
};

export default musicService;